package org.skywalking.apm.collector.worker.datamerge; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.junit.Assert; import org.skywalking.apm.collector.worker.tools.DateTools; import org.skywalking.apm.collector.worker.tools.JsonFileReader; import java.io.FileNotFoundException; import java.util.Iterator; import java.util.Map; /** * @author pengys5 */ public enum JsonDataMerge { INSTANCE; private String path = this.getClass().getResource("/").getPath(); public void merge(String expectJsonFile, JsonArray actualData) throws FileNotFoundException { Gson gson = new Gson(); String jsonStrData = JsonFileReader.INSTANCE.read(path + expectJsonFile); JsonArray expectJsonArray = gson.fromJson(jsonStrData, JsonArray.class); for (int i = 0; i < expectJsonArray.size(); i++) { JsonObject expectJson = expectJsonArray.get(i).getAsJsonObject(); mergeData(expectJson, actualData.get(i).getAsJsonObject()); } } private void mergeData(JsonObject expectData, JsonObject actualData) { Iterator<Map.Entry<String, JsonElement>> iterator = expectData.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, JsonElement> entry = iterator.next(); String key = entry.getKey(); String value = null; if (!entry.getValue().isJsonNull()) { value = entry.getValue().getAsString(); } if (entry.getValue().isJsonNull()) { Assert.assertEquals(true, actualData.get(key).isJsonNull()); } else { if (key.equals("timeSlice") || key.equals("minute") || key.equals("hour") || key.equals("day")) { value = String.valueOf(DateTools.changeToUTCSlice(Long.valueOf(value))); } if (SpecialTimeColumn.INSTANCE.isSpecialTimeColumn(key)) { String changedValue = SpecialTimeColumn.INSTANCE.specialTimeColumnChange(value); Assert.assertEquals(changedValue, actualData.get(key).getAsString()); } else { Assert.assertEquals(value, actualData.get(key).getAsString()); } } } } }